home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 108_01 / cc0t.c < prev    next >
Text File  |  1985-11-13  |  2KB  |  79 lines

  1.  
  2. /*
  3.     CC0T.C -- TRS-80 C PREPROCESSOR
  4.     WRITTEN BY LEOR ZOLMAN
  5.  
  6.     THIS PROGRAM TAKES, AS INPUT, A C SOURCE FILE WRITTEN
  7.     USING THE SPECIAL "POUND SIGN" ENCODING FOR CHARACTERS
  8.     WHICH ARE UNPRINTABLE (AND UNENTERABLE) ON THE EARLY
  9.     MODEL TRS-80 COMPUTERS. WHEREVER CC0T FINDS A SEQUENCE
  10.         #X
  11.     IN THE INPUT FILE, WHERE "X" IS ONE OF THE SPECIAL
  12.     CHARACTERS AS OUTLINED IN THE SOURCE FOR CONVERT.C,
  13.     THEN THE TWO-CHARACTER SEQUENCE IS CONVERTED TO A
  14.     SINGLE CHARACTER AS REQUIRED BY THE BDS C COMPILER.
  15.     THE RESULTANT FILE MAY THEN BE COMPILED WITH CC1, CC2,
  16.     ETC.
  17.  
  18. */
  19.  
  20. #DEFINE POUND 0X23
  21. #DEFINE LEFTBRACK 0X5B
  22. #DEFINE BACKSLASH 0X5C
  23. #DEFINE RIGHTBRACK 0X5D
  24. #DEFINE CIRCUM 0X7E
  25. #DEFINE VERTIBAR 0X7C
  26. #DEFINE UNDERSCORE 0X5F
  27. #DEFINE UPARROW 0X5E
  28.  
  29. CHAR IBUF[134], OBUF[134];
  30.  
  31. MAIN(ARGC,ARGV)
  32. INT ARGC;
  33. CHAR *ARGV[];
  34. BEGIN
  35.     INT FD1, FD2;
  36.     CHAR C;
  37.     IF (ARGC != 3) BEGIN
  38.             PRINTF("USAGE: CC0T OLD NEW <CR>\N");
  39.             EXIT();
  40.                END
  41.     FD1 = FOPEN(ARGV[1],IBUF);
  42.     IF (FD1 == -1) BEGIN
  43.             PRINTF("CANNOT OPEN INPUT FILE.\N");
  44.             EXIT();
  45.                END
  46.     FD2 = FCREAT(ARGV[2],OBUF);
  47.     IF (FD2 == -1) BEGIN
  48.             PRINTF("CANNOT OPEN OUTPUT FILE.\N");
  49.             EXIT();
  50.                END
  51.     WHILE ((( C = GETC(IBUF)) != 0X1A) && C != 255)
  52.     BEGIN
  53.       IF (C != POUND) PUTC(C,OBUF);
  54.       ELSE SWITCH(C = GETC(IBUF))
  55.        BEGIN
  56.         CASE 'B': PUTC(BACKSLASH,OBUF);
  57.               BREAK;
  58.         CASE 'L': PUTC(LEFTBRACK,OBUF);    
  59.               BREAK;    
  60.         CASE 'R': PUTC(RIGHTBRACK,OBUF);
  61.               BREAK;
  62.         CASE 'C': PUTC(CIRCUM,OBUF);    
  63.               BREAK;
  64.         CASE 'V': PUTC(VERTIBAR,OBUF);
  65.               BREAK;
  66.         CASE 'U': PUTC(UNDERSCORE,OBUF);
  67.               BREAK;
  68.         CASE 'H': PUTC(UPARROW,OBUF);
  69.               BREAK;
  70.         DEFAULT:  PUTC(POUND,OBUF);
  71.               PUTC(C,OBUF);
  72.         END
  73.     END
  74.  
  75.     IF (C == 255) C = 0X1A;
  76.     PUTC(C,OBUF);
  77.     FFLUSH(OBUF);
  78. END
  79.